//#include <stdio.h>
//int main()
//{
//	float a,c,d;
//	char b;
//	scanf("%f%c%f",&a,&b,&c);
//	if(b=='+')
//		d=a+c;
//	if(b=='-')
//		d=a-c;
//	if(b=='*')
//		d=a*c;
//	if(b=='/')
//		d=a/c;
//	printf("%.1f%c%.1f=%.2f",a,b,c,d);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int num,i=0,j=0;
//	scanf("%d",&num);
//	while(num){
//		j=j*10+num%10;
//		i++;
//		num/=10;
//	}
//	printf("%d %d",j,i);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	char c;
//	scanf("%c",&c);
//	if((c>='a'&&c<='t')||(c>='A'&&c<='T'))
//		c=c+6;
//	else if((c>'t'&&c<='z')||(c>'T'&&c<='Z'))
//		c=c-20;
//	printf("%c",c);
//}

//#include <stdio.h>
//int main()
//{
//	char c;
//	int i=6;
//	scanf("%c",&c);
//	while(i--)
//	{
//		if(c=='Z'||c=='z')
//			c-=26;
//		c++;
//	}
//	printf("%c",c);
//	
//	return 0;
//}
//#include <stdio.h>
//#include <math.h>
//void main(void)
//{
//	float a,b,c,x1,x2,f1,f2;
//	printf("输入a,b,c:");
//	scanf("%f,%f,%f",&a,&b,&c);
//	x1=-b/2.0/a;
//	do{
//		x2=x1;
//		f1=a*x1*x1+b*x1+c;
//		f2=2*a*x1+b;
//		x1=x1-f1/f2;
//	}while(fabs(x1-x2)>=1e-6);
//	printf("此方程的根是：%f\n",x2);
//}

//#include <stdio.h>
//#include <math.h>
//int main()
//{
//	int i=0,j=0,count=0,flag=1;
//	for(i=2;i<100;i++)
//	{
//		flag=1;
//		for(j=2;j<=sqrt(i*1.0);j++)
//		{
//			if(i%j==0)
//			{
//				flag=0;
//				break;
//			}
//		}
//		if(flag)
//		{
//			printf("%d\n",i);
//			count++;
//		}
//		
//	}
//	printf("%d",count);
//	
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int n,i=0,j,all=1,count=0;
//	scanf("%d",&n);
//	while(n)
//	{
//		i+=n%10;
//		n/=10;
//	}
//	printf("N=%d\n",i);
//	for(j=1;j<=i;j++)
//	{
//		all*=j;
//	}
//	printf("N!=%d\n",all);
//	while(all)
//	{
//		count+=all%10;
//		all/=10;
//	}
//	printf("%d",count);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int i,n1,n2,n3,n4,tmp;
//	int Found=6174;
//	for(i=6174;i>0;i--)
//	{
//		n1=i%10;
//		n2=i/10%10;
//		n3=i/100%10;
//		n4=i/1000;
//	if(n1<n2)
//	{
//		tmp=n1;
//		n1=n2;
//		n2=tmp;
//	}
//	if(n1<n3)
//	{
//		tmp=n1;
//		n1=n3;
//		n3=tmp;
//	}
//	if(n1<n4)
//	{
//		tmp=n1;
//		n1=n4;
//		n4=tmp;
//	}
//	if(n2<n3)
//	{
//		tmp=n2;
//		n2=n3;
//		n3=tmp;
//	}
//	if(n2<n4)
//	{
//		tmp=n2;
//		n2=n4;
//		n4=tmp;
//	}
//	if(n3<n4)
//	{
//		tmp=n3;
//		n3=n4;
//		n4=tmp;
//	}
//	if(i>999&&(n1*1000+n2*100+n3*10+n4-(n4*1000+n3*100+n2*10+n1))==i)
//		Found=i;
//	else if(i>99&&(n1*100+n2*10+n3-(n3*100+n2*10+n1))==i)
//		Found=i;	
//	else if(i>9&&(n1*10+n2-(n2*10+n1))==i)
//		Found=i;	
//	}
//	printf("%d",Found);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int i,j,num,k;
//	scanf("%d",&num);
//	for(i=0;i<num;i++)
//	{
//		k=1;
//		for(j=0;j<num+i;j++)
//		{
//			if(j<num-1-i)
//				printf(" ");
//			else
//			{
//				if(k<=i+1)
//					printf("%d",k);
//				else
//					printf("%d",2*(i+1)-k);
//				k++;
//			}
//		}
//		printf("\n");
//	}
//	for(i=num-2;i>=0;i--)
//	{
//		k=1;
//		for(j=0;j<num+i;j++)
//		{
//			if(j<num-1-i)
//				printf(" ");
//			else
//			{
//				if(k<=i+1)
//					printf("%d",k);
//				else
//					printf("%d",2*(i+1)-k);
//				k++;
//			}
//		}
//		printf("\n");
//	}
//	
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int n,i,j,S,D;
//	scanf("%d",&n);
//	for(i=0;i<2*n-1;i++)
//	{
//		if(i<n)
//		{
//			S=n-i+1;
//			D=i+1;
//		}
//		else
//		{
//			S=i-n+3;
//			D=2*n-i-1;
//		}
//		for(j=1;j<S;j++)
//			printf(" ");
//		for(j=1;j<D;j++)
//			printf("%d",j);
//		for(j=D;j>0;j--)
//			printf("%d",j);
//		printf("\n");
//	}
//	
//	
//	
//	return 0;
//}

//#include <stdio.h>  
//void main(void)  
//{  
//	char man;
//	
//	for (man = 'A'; man <= 'D'; man++) 
//	{
//		if ((man != 'A') + (man == 'C') + (man == 'D') + (man != 'D') == 3)					
//		{
//			printf("说谎的人是%c\n", man); 
//		}
//	}
//}

//#include <stdio.h>
//int main()
//{
//	int i=0;
//	for(i=1100;i>0;i--)
//	{
//		if((i%3==2)&&(i%5==4)&&(i%7==6))
//		{	printf("%d",i);
//			break;
//			
//		}
//	}
//	return 0;
//}


//#include <stdio.h>
//#include <math.h>
//int main()
//{
//	int Found=0,i=0,up=0,down=0,count=1,x1,x2,x3;
//	while(Found==0)
//	{
//		up=pow(10,count)*6;
//		down=pow(10,count++)*7;
//		for(i=up;i<down;i++)
//		{
//			x1=6;
//			x2=i/10%10;
//			x3=i%10;
//			if((i<99)&&((x1+x3*10)*4==i))
//			{
//				Found=i;
//				break;
//			}
//			if((i<999)&&((x3*10+x2*100+x1)*4==i))
//			{
//				Found=i;
//				break;
//			}
//		}
//	}
//    printf("%d",Found);
//	return 0;
//}

//#include<stdio.h>
//void main(void)
//{
//	int num = 0, i = 10;
//	
//	do 
//	{
//		num++;
//		if (num + i * 6 == 4 * (num * 10 + 6))
//			break;
//		if (num / i)
//			i *= 10;
//	} while (num + i * 6 != 4 * (num * 10 + 6));
//	
//	printf("自然数n的最小值是%d\n", num + i * 6);
//}	

//#include <stdio.h>
//int main()
//{
//	int i;
//	while(scanf("%d",&i)){
//		printf("1");
//	}
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int max,min,all=0,i,j,num;
//	scanf("%d",&num);
//	for(i=0;i<num;i++)
//	{	scanf("%d",&j);
//		all+=j;
//		if(i==0)
//			max=min=j;
//		if(max<j)
//			max=j;
//		if(min>j)
//			min=j;
//	}
//	printf("%.2f",(all-min-max)*1.0/(num-2));
//	return 0;
//}

#include <stdio.h>
int main()
{
	int n,i,j,count=0,num,max=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{	
		count=0;
		printf("%d:",i);
		for(j=1;j<=i;j++)
		{
			if(i%j==0)
			{
				count++;
				printf("%d ",j);
			}
		}
		printf(" 因子个数%d\n",count);
		if(max<count)
		{
			max=count;
			num=i;
		}
	}
	printf("1~%d之间,%d的因子个数%d,最多",n,num,max);
	return 0;
}



